package com.cl.code.common.utils;

/**
 * 字符串工具类
 *
 * @author chengliang
 * @since 1.0
 */
public class CamelCaseUtils {

    /**
     * 将下划线命名转换为驼峰命名（首字母小写）
     *
     * @param str 下划线命名字符串
     * @return 驼峰命名字符串
     */
    public static String toLowerCamelCase(String str) {
        return toCamelCase(str, false);
    }

    /**
     * 将下划线命名转换为驼峰命名（首字母大写）
     *
     * @param str 下划线命名字符串
     * @return 驼峰命名字符串
     */
    public static String toUpperCamelCase(String str) {
        return toCamelCase(str, true);
    }

    /**
     * 将下划线命名转换为驼峰命名
     *
     * @param str                  下划线命名字符串
     * @param firstLetterUpperCase 首字母是否大写
     * @return 驼峰命名字符串
     */
    public static String toCamelCase(String str, boolean firstLetterUpperCase) {
        if (str == null || str.isEmpty()) {
            return str;
        }

        StringBuilder result = new StringBuilder();
        String[] parts = str.split("_");
        for (int i = 0; i < parts.length; i++) {
            String part = parts[i];
            if (part.isEmpty()) {
                continue;
            }

            if (i == 0 && !firstLetterUpperCase) {
                result.append(part.toLowerCase());
            } else {
                result.append(Character.toUpperCase(part.charAt(0)));
                if (part.length() > 1) {
                    result.append(part.substring(1).toLowerCase());
                }
            }
        }
        return result.toString();
    }
}